package 类与对象.多态.多态参数;
/*
    多态参数
    方法定义的形参类型为父类类型，实参类型允许为子类类型

    例子：
        定义员工类Employee，包含姓名和月工资(private),以及计算年工资getAnnual的方法
        普通员工和经理继承了员工，经理类多了奖金bonus属性和管理manage方法，普通员工多了
        work方法，普通员工和经理类要求分别重写getAnnual方法

        测试类中添加一个方法showEmpAnnual(Employee e), 实现获取任何员工对象的年工资，
        并在main方法中调用该方法

        测试类中添加一个方法，testWork，如果是普通员工，则调用work方法，如果是经理，
        则调用manage方法
 */
public class Main {
    public static void main(String[] args) {
        Worker worker = new Worker("小南",4000);
        Manager manager = new Manager("张天国",10000,40000);
        Main main = new Main();
        main.showEmpAnnual(worker);
        main.showEmpAnnual(manager);

        main.testWork(worker);
        main.testWork(manager);
    }

    public void showEmpAnnual(Employee e){
        System.out.println(e.getAnnual());
    }

    public void testWork(Employee e){
        if(e instanceof Worker){
            ((Worker) e).work();
        }else if(e instanceof Manager){
            ((Manager) e).manager();
        }else {
            System.out.println();
        }
    }
}
